#ifndef _MODEL_INFO__H
#define _MODEL_INFO__H
#include <stdint.h>

#define EEROM_ARRR     0xA0    //EEROM I2C地址

#define IAP_Config_ADDR           0x00    //IAP配置地址
#define Config_Save_Addr          0x10    //配置信息起始地址
#define Model_Config_Save_Addr    0x28    //模块配置地址


#define Model_LORA_RS485_RS232       0x03 

#define ZY_L910S                     0x04
#define ZY_O_K011                    0x05

typedef union {
	struct {
		uint8_t angle_EnableMI:1;
		uint8_t MotorSpeed_EnableMI:1;
		uint8_t LimitEnable:1;
		uint8_t :5;
	};
	uint8_t reg;
} ModelEnable_Status;
//IAP 配置信息
typedef struct
{
	uint8_t        ipa_step;       //IAP 状态  
  uint16_t       app_addr;	     //app 地址
}IAP_Config_Def_t;
/*********************************
 * 模块通用配置参数
 ********************************/
typedef struct 
{
    uint8_t                   status;             //配置状态，0：未配置  1：已配置
	  uint32_t                  SN;                 //模块序列号
}GeneralConfigInfo_Def_t;

typedef union {
	struct {
		uint8_t ADDR:1;
		uint8_t Encryption:1;
		uint8_t Relay:1;
		uint8_t :5;
	};
	uint8_t reg;
} NetWorkEnable;
/************通信网络参数配置******/
typedef struct
{
	uint8_t id;            //网络ID
	uint16_t add;          //设备地址
	uint8_t  relay_id1;    //中继网络1
	uint8_t  relay_id2;    //中继网络2
	NetWorkEnable enable;
}Lora_NetWorkConfig_t;
typedef struct
{
	uint32_t BandRate;     //485波特率
	uint8_t  Data_Size;          //数据位
	uint8_t  StopBits;           //停止位
	uint8_t  Parity;             //奇偶校验
}UartPortConfig_t;
/*************LORA配置参数********/
typedef struct
{
	uint32_t RF_RXFrequency;   //接收频率
	uint32_t RF_TXFrequency;   //发送频率 
	uint8_t  RF_power;         //功率
	uint8_t  SignalBw;         //带宽
	uint8_t  SpreadingFactor;  //扩频因子
	uint8_t  ErrorCoding;      //编码率
}Lora_RFConfig_t;
/*********************************
 * 模块参数
*********************************/
typedef struct
{
	Lora_RFConfig_t        rf_config;    //无线通信参数配置
	Lora_NetWorkConfig_t   net_config;   //网络配置参数
	UartPortConfig_t       rs485;        //485配置
}ModelConfig_Def_t;
/*******************************
 * 模块信息
 * ****************************/
typedef struct
{
	IAP_Config_Def_t           iap_info;         //IAP 信息
  GeneralConfigInfo_Def_t    general_info;    //通用配置信息
	ModelConfig_Def_t          model_info;      //模块配置信息
	uint8_t                    run_model;       //模块运行模式
	uint8_t                    model_type;      //模块类型
}Config_Def_t;

typedef enum
{
	RUNModel_CONFIG=0,    //配置模式
	RUNModel_Reply=1,     //中继模式
	RUNModel_SeriaNet=2   //透传模式
}RunModel;

typedef enum
{
	IAP_STEP_IAP=0,                  //IAP 程序
	IAP_STEP_IAP_WriteFrame=1,       //写入新固件
	IAP_STEP_APP=2,                  //APP 启动
  IAP_STEP_APP_Updata=3,           //APP 请求升级	
}IAP_STEP_Type;

void Init_Modelinfo(void);    //初始化模块信息

uint8_t Save_ModelConfigInfo(ModelConfig_Def_t *config_info);     //保存模块配置信息
uint8_t Save_ConfigInfo(GeneralConfigInfo_Def_t *config_info);    //保存配置信息
uint8_t Save_IAPConfig(IAP_Config_Def_t *iap_config);             //保存IAP
uint8_t Clear_Info(void);   //清楚保存信息 
extern Config_Def_t    model_info_handle;
#endif

